#代理
'''
代理IP是一个IP，指向的是一个代理服务器。
代理服务器能够帮助我们向目标服务器转发请求。
IP地址：精确的定位


代理---正向代理和反向代理

正向代理：给客户端做代理，让服务器不知道客户端的真实身份
保护自己的IP地址不会被封，要封也是封代理IP

#反向代理：给服务器做代理，让浏览器不知道服务器的真实地址

#正向代理保护客户端，反向代理保护服务端



代理---分为三类：
1.透明代理：服务器知道我们使用了代理IP,也知道真实IP
2.匿名代理：服务器能够检测到使用了代理IP，但不知道真实IP
3.高匿代理：服务器既不能检测到使用代理IP，也不知道真实IP

'''


#代理IP的使用

#proxies代理参数
'''
用法：
proxises的形式：字典

proxies = {
    #以键值对的形式，固定的语法，IP地址:端口号
    "http":"http://12.34.56.9:9527",
    "https":"https://12.34.56.79.9527",
}

response = requests.get(url,proxies=proxies)
'''
import requests
url = 'https://www.baidu.com/'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

#构建代理字典
proxies = {
    #第一种写法：
    'http':'12.34.56.79:9527'
    #第二种写法：
    #'http':'http://12.34.56.79:9527'
}

res = requests.get(url,headers=headers,proxies=proxies)
print(res.content.decode())

#代理IP无效，计算机会自动使用本机的真实IP，所以才会成功访问。    




#代理IP测试
'''
百度搜索“高匿免费代理IP”、“番茄代理IP”，查找一些可用的代理IP

找到特殊的测试IP的url--包括IP地址的url

(百度搜索“IP地址”，查询本地IP)
'''
url = 'https://2021.ip.138.com'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

#构建代理IP
proxies = {
    'https':'171.35.146.299:9999'
}

res = requests.get(url,headers=headers,proxies=proxies)
print(res.content.decode())
#如果代理无效，会返回异常；有效会显示IP地址




#retrying模块 --通过装饰器的方式使用,重新加载页面的功能
from retrying import retry

@retry(stop_max_attempt_number=3)  #装饰器语法糖
def test():
    print('123')
    url = 'https://www.baidu.com/'
    response = requests.get(url)
    print(response.content.decode())

try:
    test()
except:
    print('完成了....')



#timeout参数 --超时参数，对请求强制返回结果

url = 'https://www.baidu.com/'

res = requests.get(url,timeout=2)   #设置超时时间，2秒内返回，否则抛出异常
print(res.content.decode())
